
// 功能: 切换目录(cd .. 或者 cd dir1)
void cd(void)
{
int i;
if(argc != 2)
{
printf("Command cd must have two args. \n");
return ;
}
if(!strcmp(argv[1], ".."))
inum_cur = inode_array[inum_cur].iparent;
else
{
// 遍历i节点数组
for(i = 0; i < INODENUM; i++)
if((inode_array[i].inum>0)&&
(inode_array[i].type=='d')&&
(inode_array[i].iparent==inum_cur)&&
!strcmp(inode_array[i].file_name,argv[1])&&
check(i))
break;
if(i == INODENUM)
printf("This directory isn't exsited.\n");
else inum_cur = i;
}
}
// 功能: 显示当前目录下的子目录和文件(dir)
void dir(void)
{
int i;
int dcount=0,fcount=0;
short bcount=0;
if(argc != 1)
{
printf("Command dir must have one args. \n");
return ;
}
// 遍历i节点数组, 显示当前目录下的子目录和文件名
for(i = 0; i < INODENUM; i++)
if((inode_array[i].inum> 0) &&
(inode_array[i].iparent == inum_cur))
{
if(inode_array[i].type == 'd' && check(i))
{
dcount++;
printf("%-20s<DIR>\n", inode_array[i].file_name);
}
if(inode_array[i].type == '-' && check(i))
{
fcount++;
bcount+=inode_array[i].length;
printf("%-20s%12d bytes\n", inode_array[i].file_name,inode_array[i].length);
}
}
printf("\n                    %d file(s)%11d bytes\n",fcount,bcount);
printf("                    %d dir(s) %11d bytes FreeSpace\n",dcount,1024*1024-bcount);
}